/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import Modelo.Producto;
import Utils.Constantes;
import Utils.Mensajes;
import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.event.ActionEvent;

/**
 *
 * @author HNCR
 */
public class BeanProducto implements Serializable {
    
    private Producto objProducto_Reg;
    private Producto objProducto_Mod;
    private Producto objProducto_Detalle;
    private Producto objProducto_Eli;
    
    private Producto objProducto_Buscar;
    
    private ArrayList<Producto> arr_Producto = null;
    
    //TabView comportamiento ocultar o mostrar componentes
    private Integer activeTabIndex; //indice de los tab
    private boolean bandVer=true;    
    private boolean bandMod=true;
    private boolean bandEli=true;
    
    private String puntAnt;

    public Producto getObjProducto_Reg() {
        return objProducto_Reg;
    }

    public void setObjProducto_Reg(Producto objProducto_Reg) {
        this.objProducto_Reg = objProducto_Reg;
    }

    public Producto getObjProducto_Mod() {
        return objProducto_Mod;
    }

    public void setObjProducto_Mod(Producto objProducto_Mod) {
        this.objProducto_Mod = objProducto_Mod;
    }

    public Producto getObjProducto_Detalle() {
        return objProducto_Detalle;
    }

    public void setObjProducto_Detalle(Producto objProducto_Detalle) {
        this.objProducto_Detalle = objProducto_Detalle;
    }

    public Producto getObjProducto_Eli() {
        return objProducto_Eli;
    }

    public void setObjProducto_Eli(Producto objProducto_Eli) {
        this.objProducto_Eli = objProducto_Eli;
    }

    public ArrayList<Producto> getArr_Producto() {
        return arr_Producto;
    }

    public void setArr_Producto(ArrayList<Producto> arr_Producto) {
        this.arr_Producto = arr_Producto;
    }

    public Integer getActiveTabIndex() {
        return activeTabIndex;
    }

    public void setActiveTabIndex(Integer activeTabIndex) {
        this.activeTabIndex = activeTabIndex;
    }

    public boolean isBandVer() {
        return bandVer;
    }

    public void setBandVer(boolean bandVer) {
        this.bandVer = bandVer;
    }

    public boolean isBandMod() {
        return bandMod;
    }

    public void setBandMod(boolean bandMod) {
        this.bandMod = bandMod;
    }

    public boolean isBandEli() {
        return bandEli;
    }

    public void setBandEli(boolean bandEli) {
        this.bandEli = bandEli;
    }

    public Producto getObjProducto_Buscar() {
        return objProducto_Buscar;
    }

    public void setObjProducto_Buscar(Producto objProducto_Buscar) {
        this.objProducto_Buscar = objProducto_Buscar;
    }

    public String getPuntAnt() {
        return puntAnt;
    }

    public void setPuntAnt(String puntAnt) {
        this.puntAnt = puntAnt;
    }
    
    //Iniciallzaciones (limpian los objetos)
    public void doIniciarProducto_Listar(){
        this.arr_Producto = new ArrayList<Producto>();
    }
    
    public void doIniciarProductoRegistrar(){
        this.objProducto_Reg = new Producto();
    }
    
    public void doIniciarProducto_Modificar(){
        this.objProducto_Mod = new Producto();
    }
    
    public void doIniciarProducto_Detalle(){
        this.objProducto_Detalle = new Producto();
    }
    public void doIniciarProducto_Elimina(){
        this.objProducto_Eli = new Producto();
    }
    
    //Constructor
    public BeanProducto() {
        
        try {
            this.doIniciarProductoRegistrar();
        } catch (Exception e) {
            Mensajes.manejarError(e,"Error al Iniciar Proceso");
        }
        
    }
    
    public String doProductoRegistra(){
        
        try {
            
            boolean a = false;
            a = Producto.registrarProducto(objProducto_Reg);
            
            if(a){
                Mensajes.guardarMensajeExito("Registro","Registrado correctamente");
                this.doIniciarProductoRegistrar();// limpia los datos de la vista cuando se registra
            }
            else{
                 Mensajes.manejarError("Registro","Error al Registrar");                
            }
            
        } catch (Exception e) {
            Mensajes.manejarError(e,"Registrar Zona Observacion");
        }
        return null;
    }
    
    
    /*
     * Método invocado por el Beans para modificar un Producto
     */
      public String doModificarProducto(){     
        
        try
        {           
            if (this.modificarProducto()){  
                Mensajes.guardarMensajeExito("Actualizar Producto","Actualizado Correctamente");                   
            }else {                
                Mensajes.manejarError("Actualizar Producto","Error de Actualizacion");                
            }
            
        }
        catch( Exception e )
        {
            Mensajes.manejarError(e,"Actualizacion de Producto");
        }
        desactivaTabMod();
        return null;
    }
      
      /*
     * Método invocado por el Beans para modificar un Producto
     */
      public String doEliminarProducto(){     
        
        try
        {           
            if (this.eliminarProducto()){  
                Mensajes.guardarMensajeExito("Eliminar Producto","Eliminar Correctamente");                   
            }else {                
                Mensajes.manejarError("Eliminar Producto","Error de Eliminacion");                
            }
            
        }
        catch( Exception e )
        {
            Mensajes.manejarError(e,"Eliminar Producto");
        }
        desactivaTabElim();
        return null;
    }
    
      
       public boolean  modificarProducto(){
        boolean a=false;        
       Producto so=new Producto();
        try{            
            so=this.objProducto_Mod;
            this.doIniciarProducto_Modificar();
            a=Producto.actualizarProducto(so);         
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
       public boolean  eliminarProducto(){
        boolean a=false;        
       Producto so=new Producto();
        try{            
            so=this.objProducto_Eli;
            this.doIniciarProducto_Elimina();
            a=Producto.eliminarProducto(so);         
        }catch(Exception e){
            System.out.println("Error en el metodo por: " + e.getMessage());
            e.printStackTrace();
        }
       return a;    
    }
      
    public ArrayList<Producto> doListarProducto(){
        this.doIniciarProducto_Listar();
        this.arr_Producto = Producto.getListarProducto();
        
        return this.arr_Producto;
    }
    
    public String getSizeRegistroProducto(){
        if(this.arr_Producto==null){
            return "0";
          }
        else{
            return "" + this.arr_Producto.size();
        }
    }
    
    //modificar producto
     public String modificarProducto(Producto so){        
        this.doIniciarProducto_Modificar();
        this.objProducto_Mod=so;
        this.bandMod=false;     
        this.activeTabIndex=Constantes.PROD_TAB_MODIFICA;         
        return null;          
    }
     
     //busqueda de productos
     public void onClickBusq(ActionEvent evt){ 
        Object param=evt.getComponent().getAttributes().get("param");
        this.puntAnt=param.toString();  
        
    }
     //desactiva tab mod
     public String desactivaTabMod(){        
       this.bandMod=true;           
       
       if(puntAnt.compareTo("2")==0){
           //this.doBuscarAsociacion();
           //this.activeTabIndex=Constantes.TAB_BUSQUEDA;
       }
       else{
           if(puntAnt.compareTo("1")==0){    
               this.doIniciarProducto_Modificar();
               this.doListarProducto();
               this.activeTabIndex=Constantes.PROD_TAB_LISTA;
           }
       }
      Mensajes.guardarMensajeExito("Cancelar","Acción");
       
       return null;
    }
     
     public String eliminarProducto(Producto pr){     
        this.objProducto_Eli=pr;          
        this.activeTabIndex=Constantes.PROD_TAB_ELIMINA;        
        this.bandEli=false;   
        return null;   
    }
    
     public String desactivaTabElim(){        
        this.bandEli=true;
       if(puntAnt.compareTo("2")==0){
           //this.doBuscarAsociacion();
           //this.activeTabIndex=Constantes.TAB_BUSQUEDA;
       }
       else{
           if(puntAnt.compareTo("1")==0){    
               this.doIniciarProducto_Elimina();
               this.doListarProducto();
               this.activeTabIndex=Constantes.PROD_TAB_LISTA;
           }
       }
      Mensajes.guardarMensajeExito("Cancelar","Acción");
      return null;
    }
}
